{{- define "main" }}
  {{ $homepage := .Site.GetPage "homepage" }}
  {{ $widgets := $homepage.Resources }}
  {{ range $widgets }}
    {{ if .Params.widget.handler }}
      {{ partial "widgets/load" . }}
    {{ else }}
      {{ errorf "Failed to find widget param in %q" .Path }}
    {{ end }}

  {{/*  Deprecation warning(v1.0.0) starts  */}}
  {{ else }}
    {{ warnf "Param 'hero' in params.toml is deprecated and will be removed in Eureka v1.0.0. See https://www.wangchucheng.com/en/docs/hugo-eureka/homepage-configuration/" }}
    <div class="bg-secondary-bg pl-scrollbar">
      <div class="max-w-screen-xl mx-auto">
        <div class="grid grid-cols-9 grid-rows-5 h-(screen-16)">
          {{- $imgLeft := partial "utils/get-image" (dict "context" . "url" .Site.Params.hero.imgLeft)}}
          {{- with $imgLeft }}
          <div class="col-start-2 col-span-4 row-start-3 row-span-2 bg-local bg-cover z-10 shadow-2xl"
            style="background-image: url({{ . }});"></div>
          {{- end }}
        
          <div class="col-start-3 col-span-5 row-start-2 row-span-3 z-20">
            <div class="flex flex-col items-center justify-center min-h-full">
              <div class="bg-white bg-opacity-75 shadow-2xl -m-12 p-12">
                <span class="font-bold text-black text-opacity-75 text-2xl md:text-3xl">{{ .Site.Params.hero.slogan }}</span>
              </div>
            </div>
          </div>
          {{- $imgRight := partial "utils/get-image" (dict "context" . "url" .Site.Params.hero.imgRight)}}
          {{- with $imgRight }}
          <div class="col-start-5 col-span-4 row-start-2 row-span-2 bg-local bg-cover shadow-2xl"
            style="background-image: url({{ . }});">
          </div>
          {{- end }}
        </div>
      </div>
    </div>
    <div class="pl-scrollbar">
      <div class="max-w-screen-xl mx-auto">
        <div class="pt-12 md:px-4 xl:px-8">
          {{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
          {{- partial "components/masonry" $pages }}
        </div>
      </div>
    </div>
    {{/*  Deprecation warning(v1.0.0) ends  */}}
    
  {{ end }}
{{- end }}

{{ define "partials/widgets/load" }}
  {{ $widget := .Params.widget }}

  {{ $fullScreenWidgets := slice "vintage" }}

  {{/*  background config  */}}
  {{ $backgroundClass := "" }}
  {{ $backgroundStyle := "" }}

  {{ if $widget.background.image }}
    {{ $image := partial "utils/get-image.html" (dict "context" . "url" $widget.background.image) }}
    {{ $backgroundStyle = print $backgroundStyle "background-image: url(" $image ");" }}
    {{/*  background size  */}}
    {{ $size := $widget.background.size }}
    {{ $sizeOptions := dict "auto" "bg-auto" "cover" "bg-cover" "contain" "bg-contain" }}
    {{ if $size }}
      {{ $size = index $sizeOptions $size }}
      {{ if $size }}
        {{ $backgroundClass = print $backgroundClass " " $size }}
      {{ else }}
        {{/*  TODO error  */}}
      {{ end }}
    {{ end }}

    {{/*  background position  */}}
    {{ $position := $widget.background.position }}
    {{ $positionOptions := dict "center" "bg-center" "top" "bg-top" "right" "bg-right" "bottom" "bg-bottom" "left" "bg-left" }}
    {{ if $position }}
      {{ $position = index $positionOptions $position }}
      {{ if $position }}
        {{ $backgroundClass = print $backgroundClass " " $position }}
      {{ else }}
        {{/*  TODO error  */}}
      {{ end }}
    {{ end }}

    {{/*  background position  */}}
    {{ $attachment := $widget.background.attachment }}
    {{ $attachmentOptions := dict "fixed" "bg-fixed" "local" "bg-local" "scroll" "bg-scroll" }}
    {{ if $attachment }}
      {{ $attachment = index $attachmentOptions $attachment }}
      {{ if $attachment }}
        {{ $backgroundClass = print $backgroundClass " " $attachment }}
      {{ else }}
        {{/*  TODO error  */}}
      {{ end }}
    {{ end }}

  {{ else }}
    {{/*  background color  */}}
    {{ $color := $widget.background.color }}
    {{ $colorOptions := dict "primary" "bg-primary-bg" "secondary" "bg-secondary-bg" "tertiary" "bg-tertiary-bg" }}
    {{ if $color }}
      {{ $colorClass := index $colorOptions $color }}
      {{ if $colorClass }}
        {{ $backgroundClass = print $backgroundClass " " $colorClass }}
      {{ else }}
        {{ $backgroundStyle = print $backgroundStyle "background-color: " $color ";"}}
      {{ end }}
    {{ else }}
      {{ $colorClass := index $colorOptions "primary" }}
      {{ $backgroundClass = print $backgroundClass " " $colorClass }}
    {{ end }}
  {{ end }}

  {{/*  widget config  */}}
  {{ $widgetClass := "" }}
  
  {{ if not (in $fullScreenWidgets $widget.handler) }}
    {{/*  widget width  */}}
    {{ $width := $widget.width }}
    {{ $widthOptions := dict "sm" "lg:w-2/3" "md" "lg:w-3/4" "lg" "lg:w-4/5" "xl" "w-full" }}
    {{ if $width }}
      {{ $widthClass := index $widthOptions $width }}
      {{ if $widthClass }}
        {{ $widgetClass = print $widgetClass " " $widthClass }}
      {{ end }}
    {{ else }}
      {{ $widthClass := index $widthOptions "md" }}
      {{ $widgetClass = print $widgetClass " " $widthClass }}
    {{ end }}

    {{/*  widget height  */}}
    {{ $height := $widget.height }}
    {{ $heightOptions := dict "sm" "h-64" "md" "h-96" "lg" "h-128" "xl" "h-160" "screen" "h-(screen-16)" }}
    {{ if $height }}
      {{ $heightClass := index $heightOptions $height }}
      {{ if $heightClass }}
        {{ $widgetClass = print $widgetClass " " $heightClass }}
      {{ end }}
    {{ end }}
    {{ $widgetClass = print $widgetClass " mx-auto px-6 md:px-8 xl:px-12 py-12" }}
  {{ end }}

  <div class="pl-scrollbar {{ with $backgroundClass -}}{{ partial "utils/standardize-classes" . }}{{- end }}" 
    {{ with $backgroundStyle }} style="{{ . | safeCSS }}" {{ end }}>
    <div class="max-w-screen-xl mx-auto">
      <div id="{{ .File.BaseFileName }}" class="{{ with $widgetClass -}}{{ partial "utils/standardize-classes" . }}{{- end }}">
        {{ partial "widgets/load-sidebar" . }}
      </div>
    </div>
  </div>
{{ end }}

{{ define "partials/widgets/load-sidebar" }}
  {{ $sidebar := .Params.widget.sidebar }}

  {{ if $sidebar.position }}

    {{ $scaleClass := "" }}
    {{/*  widget width  */}}
    {{ $scale := $sidebar.scale }}
    {{ $scaleOptions := dict "sm" "lg:w-1/5" "md" "lg:w-1/4" "lg" "lg:w-1/3" "xl" "lg:w-1/2" }}
    {{ if $scale }}
      {{ $scaleClass = index $scaleOptions $scale }}
    {{ else }}
      {{ $scaleClass = index $scaleOptions "md" }}
    {{ end }}
    <div class="flex flex-col {{ if eq $sidebar.position "right" -}} lg:flex-row-reverse {{- else -}} lg:flex-row {{- end }}">
      <div class="flex-none {{ with $scaleClass -}}{{ partial "utils/standardize-classes" . }}{{- end }} {{ if eq $sidebar.position "left" -}} lg:mr-4 {{- else -}} lg:ml-4 {{- end }}">
        <h2 class="font-bold text-3xl my-4">{{ .Params.Title }}</h2>
      </div>
      <div class="flex-grow {{ if eq $sidebar.position "right" -}} lg:mr-4 {{- else -}} lg:ml-4 {{- end }}">
        {{ partial (printf "widgets/%s" .Params.widget.handler) . }}
      </div>
    </div>
  {{ else }}
    {{ partial (printf "widgets/%s" .Params.widget.handler) . }}
  {{ end }}
{{ end }}